package com.briup.day02;

public class Homework {

    public static void main(String[] args) {
        // 大类型的值赋值给给小类型的变量时，必须进行强制类型转换，才能通过编译
        // 因为大类型的数值放入到小类型变量的空间中，极有可能导致数据移除，
        // 会截断部分数据，会导致最终数据发生改变
       /*
         int类型 4个字节，byte类型 1个字节
         156 ==> 0000 0000 1001 1100
         放入到byte中，只能放下8位的数，1001 1100 补码
         1110 0100 ==> -100
         */
        byte a = (byte) 156;
        System.out.println(a);
        /*
            基本数据类型的顺序如下:
            byte < short < int < long < float < double
                   char /
            小类型到大类型是可以自动转换的，而大类型转为小类型必须强制指定转换的类型
         */
        // char类型为2个字节，即16个二进制位  ==> 4个十六进制位
        // 16进制转换为2进制，1个十六进制位的数 = 4个二进制位的数
        // 16进制数的取值：0-9a-f => 0-15 f/15 ==> 1111
        char c = '\u6c49';
        System.out.println(c);
        int d = c;
        System.out.println(d);
        // 20亿在int的取值范围之内，两个int类型的值可以正常进行运算，
        // 在Java运算时，如果一个低类型的值/变量与高类型的值/变量进行运算，那么结果会变成高类型
        int e = 2000000000 + 2000000000;
        System.out.println(e);
        // 在Java中所有的整数默认都是int类型，
        // 在赋值操作时，如果字面量常量没有超过byte、short等类型的取值范围，
        // 那么是可以将作为int类型的字面常量赋值给低类型的byte、short （字面常量的优化）
        byte a1 = 126;
        byte a2 = 1;
        int a3 = 0;
        // 在其余涉及到变量运算的操作中时，是没有该优化的
        // byte h = a1 + a2;

        short s = 100;
//        short s1 = s + 1;
        short s1 = ++s;
        // 这里有一个隐含的强制类型转换
        s += 1;
        // 整数常量默认使用的是int类型表示，int最大值是 21亿，99亿超出了int的取值范围
        // 即使用int无法表示该数值，当使用int无法表示时，主要在数值后添加L（long类型）即可
        long g = 9999999999L;
    }
}
